// 给定一个大小为 n 的数组 nums ，返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

// 你可以假设数组是非空的，并且给定的数组总是存在多数元素。
// 输入：nums = [2,2,1,1,1,2,2,3]
// 输出：2

/**
 * @param {number[]} nums
 * @return {number}
 */
 var majorityElement = function(nums) {

  // 方法1: 排序
  // let len =nums.length
  // if(len===0) return undefined
  // let numIndex = Math.ceil(nums.length/2) - 1
  // let tempNums = nums.sort((a,b)=>a-b)
  // return tempNums[numIndex]

  //  方法2(最优解)
  //  count计数
  let winner = nums[0]
  let count = 1
  
  for(let i = 1; i < nums.length; i++) {
    if(nums[i] === winner) {
      count++
    }
    else if (count === 0) {
      winner = nums[i]
      count++
    }
    else {
      count--
    }
  }
  return winner
};

// 元编程

